﻿// Колесов 
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Win32;
using System.Data.OleDb;
using Bobr.BUtil;
using Transfer.DataLayer.LAO;

namespace Transfer
{
    /// <summary> Работа с маршрутами ИС-ПРО
    /// Работа ведется через SDASTD 
    /// </summary>
    public class LaoRoute
    {
        /// <summary> Количество загруженных маршрутов
        /// </summary>
        public int Count
        {
            get { return _count; }
            //set { _count = value; }
        }
        private int _count = 0;
	
        RouteDS rds;

        /// <summary> При создании объекта сразу подключаемся к таблице
        /// маршрутов ИС-ПРО и загружаем ее к себе.
        /// </summary>
        public LaoRoute()
        {
            // Из параметров LAO определим путь к таблице маршрутов
            RegistryKey hklm = Registry.LocalMachine;
            RegistryKey rk = hklm.OpenSubKey(@"Software\Intellect-Service\BPROCOMOBJDIR");
            string netDir = rk.GetValue("NetDir").ToString().Trim();
            string firm = rk.GetValue("Org").ToString().Trim();
            string proPath = netDir + @"\DAT\FIRM_" + firm.PadLeft(3, '0');
            // Изменим строку подключения
            //System.Data.OleDb.OleDbConnectionStringBuilder csb = new System.Data.OleDb.OleDbConnectionStringBuilder(Properties.Settings.Default.RouteConnectionString);
            // !!! Последовательность параметров должна быть именно такая !!!
            // !!! Иначе - ошибка при завершении приложения.
            string constr = "Provider=SdaStd.1;Data Source="+ proPath +";User ID=Admin;Mode=ReadWrite;Extended Properties=Sda.StayIntell;Persist Security Info=False;Map  UI4 to DECIMAL=False;Bookmarks support=False;Approximate positions support=False;Tree data include=False;To enable simulation of repeated opening for the same table=True";
            //System.Data.OleDb.OleDbConnectionStringBuilder csb = new System.Data.OleDb.OleDbConnectionStringBuilder(constr);
            //csb.DataSource = proPath;

            rds = new RouteDS();
            string routeSelectCmd = " select * from trdrt ";
            //OleDbDataAdapter routeDA = new OleDbDataAdapter(routeSelectCmd, csb.ConnectionString);
            OleDbDataAdapter routeDA = new OleDbDataAdapter(routeSelectCmd, constr);
            try
            {
                rds.trdrt.Clear();
                routeDA.Fill(rds, "trdrt");
            }
            catch (Exception ex)
            {
                throw new Exception("Ошибка чтения справочника маршрутов.\r\n" + ex.Message, ex.InnerException);
            }
            _count = rds.trdrt.Count;           
            //routeDA.Dispose();
        }

/*
        public ISroute()
        {
            #region ["Подключение"]
            // Из параметров LAO определим путь к таблице маршрутов
            RegistryKey hklm = Registry.LocalMachine;
            RegistryKey rk = hklm.OpenSubKey(@"Software\Intellect-Service\BPROCOMOBJDIR");
            string netDir = rk.GetValue("NetDir").ToString().Trim();
            string firm = rk.GetValue("Org").ToString().Trim();
            string proPath = netDir + @"\DAT\FIRM_" + firm.PadLeft(3, '0');

            ADODB.Connection ProConn = new ADODB.Connection();
            string constr = "Provider=SdaStd.1;Data Source=" + proPath + ";User ID=Admin;Mode=ReadWrite;Extended Properties=Sda.StayIntell;Persist Security Info=False;Map  UI4 to DECIMAL=False;Bookmarks support=True;Approximate positions support=False;Tree data include=True;To enable simulation of repeated opening for the same table=False";
            ProConn.Open(constr, "Admin", "", 0);
            #endregion

            // Запросом заполним ADO recordset
            object Rcnt;
            ADODB.Recordset rs = ProConn.Execute("select * from trdrt", out Rcnt, 0);

            // Перенесем данные из recordset в DataTable
            rds = new RouteDS();
            rs.MoveFirst();
            while (!rs.EOF)
            {
                RouteDS.trdrtRow row = rds.trdrt.NewtrdrtRow();
                row.TrdRt_Rcd = Convert.ToInt32(rs.Fields["TrdRt_Rcd"].Value);
                row.TrdRt_Cd = rs.Fields["TrdRt_Cd"].Value.ToString().Trim();
                rds.trdrt.AddtrdrtRow(row);
                rs.MoveNext();
            }
            _count = rds.trdrt.Count;
            rs.Close();
            ProConn.Close();
        }
*/

        /// <summary> По коду маршрута возвращает его Rcd 
        /// или 0, если маршрут не найден.
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public Int32 GetRcdByCode(string code)
        {
            if (code.Trim() == string.Empty)  return 0;

            RouteDS.trdrtRow[] rows = (RouteDS.trdrtRow[])rds.trdrt.Select("TrdRt_Cd = '" + code.Trim() + "'");
            if (rows != null && rows.Length > 0)
                return Convert.ToInt32(rows[0].TrdRt_Rcd);
            else
                return 0;
        }
    }
}
